package stirling.software.SPDF.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import stirling.software.SPDF.model.ApplicationProperties;

@Configuration
public class OpenApiConfig {

	@Autowired
	ApplicationProperties applicationProperties;

	@Bean
	public OpenAPI customOpenAPI() {
		String version = getClass().getPackage().getImplementationVersion();
		if (version == null) {
			version = "1.0.0"; // default version if all else fails
		}

		SecurityScheme apiKeyScheme = new SecurityScheme().type(SecurityScheme.Type.APIKEY).in(SecurityScheme.In.HEADER)
				.name("X-API-KEY");
		if (!applicationProperties.getSecurity().getEnableLogin()) {
			return new OpenAPI().components(new Components())
					.info(new Info().title("Stirling PDF API").version(version).description(
							"API documentation for all Server-Side processing.\nPlease note some functionality might be UI only and missing from here."));
		} else {
			return new OpenAPI().components(new Components().addSecuritySchemes("apiKey", apiKeyScheme))
					.info(new Info().title("Stirling PDF API").version(version).description(
							"API documentation for all Server-Side processing.\nPlease note some functionality might be UI only and missing from here."))
					.addSecurityItem(new SecurityRequirement().addList("apiKey"));
		}

	}

}